名字空间和重载

  重载可以跨名字空间工作。对于我们能以最小的代码将现存的库修改为使用名字空间的东西而言,这特征是必不可少的。看下面例子:

    // 老的A.h
        void f(int);
        // ...

    // 老的B.h
        void f(char);
        // ...

    // 老的user.c
        #include "A.h"
        #include "B.h"

        void g()
        {
            f('a');        // 调用B.h里的f(char)
        }

这个程序可以升级到使用名字空间的版本,无需修改实际代码:

    // 新的A.h:
        namespace A {
            void f(int);
            // ...
        }

    // 新的B.h:
        namespace B {
            void f(char);
            // ...
        }

    // 新的user.c:
        #include "A.h"
        #include "B.h"

        using namespace A;
        using namespace B;

        void g()
        {
            f('a');        // 调用B.h里的f(char)
        }

如果希望保持user.c完全不改变,我们也可以把使用指令放进头文件里。

🔚